## Общая структура проекта для домашнего задания по добавлению взаимодействия между клиентом и сервером

### Постановка задачи

Цель:
В этой домашней работе мы применим на практике полученные знания по работе с REST API. Для уже хорошо знакомого нам проекта Otus.Teaching.Concurrency.Import необходимо будет добавить два внутренних проекта - WebApi и консольный клиент. Аналогично работе на самом уроке, консольный клиент должен отправлять в WebApi запрос на сохранение случайным образом сгенерированного пользователя. Сервер, в свою очередь, при добавлении пользователя должен проверять наличие пользователя в БД и возвращать коды ответов: 
- 200, если пользователь добавлен без ошибок;
- 409, если пользователь с таким Id уже существует в базе.
Также, должен быть метод получения пользователя по идентификатору, а сервер должен отдавать статус-код 200 с информацией о пользователе, если он есть, либо 404, если пользователь не был найден.

### Задание
1. Доделать предыдущую работу по проекту https://gitlab.com/devgrav/Otus.Teaching.Concurrency.Import, если она ещё не закончена;
2. Создать проект WebApi с методом GET /users/{id};
3. Создать проект консольного приложения принимающего с консоли ID, запрашивающего и отображающего данные по пользователю;
4. Добавить поддержку метода POST /users/;
5. Добавить генерацию случайного пользователя в консольном приложении и его отправку на сервер для сохранения.

!ВАЖНО! 
При отправке домашней работы напишите также сколько времени у вас заняло выполнение работы.

### Оценка 
1. 1 балла
2. 2 балла
3. 3 балла
4. 1 балла
5. 1 балл

1 балл: Сделано 2 CodeReview;
1 балл: CodeStyle, грамотная архитектура, всё замечания проверяющего исправлены.

Минимальный проходной балл: 8 баллов.

### Otus.Teaching.Concurrency.Import.WebApiServer

WebApi проект, отправляющий и добавляющий объекты класса `Customer` через REST API.

### Otus.Teaching.Concurrency.Import.WebApiClient

Консольное приложение, отправляющее и получающее объекты класса `Customer` через REST API.

### Otus.Teaching.Concurrency.Import.Loader

Консольное приложение, которое должно сгенирировать файл с данными и запустить загрузку из него через реализацию `IDataLoader`.

### Otus.Teaching.Concurrency.Import.DataGenerator

Библиотека, в которой должна определена логика генерации файла с данными, в базовом варианте это XML.

### Otus.Teaching.Concurrency.Import.DataGenerator.App

Консольное приложение, которое позволяет при запуске отдельно выполнить генерацию файла из `DataGenerator` библиотеки.

### Otus.Teaching.Concurrency.Import.DataAccess

Библиотека, в которой находится доступ к базе данных и файлу с данными.

### Otus.Teaching.Concurrency.Import.Core

Библиотека, в которой определены сущности БД и основные интерфейсы, которые реализуют другие компоненты.
